﻿namespace Busconeitor.Domain.Utils.SortMethods
{
    using System.Linq;

    /**
 * Representa un arreglo y codifica diversos métodos de ordenamiento
 *
 * @author Ing. Valerio Frittelli
 * @version Septiembre 2008
 */
    public abstract class Ordenamiento
    {

        public static void QuickSort(IQuickSortComparable[] pArray)
        {
            QuickSortOrdenar(pArray, 0, pArray.Count() - 1);
        }

        private static void QuickSortOrdenar(IQuickSortComparable[] pArray, int izq, int der)
        {
            int i, j;
            i = izq;
            j = der;
            IQuickSortComparable x;
            IQuickSortComparable y;
            x = pArray[(izq + der) / 2];

            do
            {
                while (pArray[i].QuickSortCompare(x) < 0 && i < der)
                {
                    i++;
                }
                while (x.QuickSortCompare(pArray[j]) < 0 && j > izq)
                {
                    j--;
                }
                if (i <= j)
                {
                    y = pArray[i];
                    pArray[i] = pArray[j];
                    pArray[j] = y;
                    i++;
                    j--;
                }
            } while (i <= j);
            if (izq < j)
            {
                QuickSortOrdenar(pArray, izq, j);
            }
            if (i < der)
            {
                QuickSortOrdenar(pArray, i, der);
            }
        }
    }

}
